package sun.superstring.branch;

public class SwitchDemo4 {
    public static void main(String[] args) {
        // 目标：搞清楚Switch的注意事项，穿透性的应用

        test1();
        test2();
        System.out.println("-------------------");
        test3();
    }

    // 1.表达式类型只能是byte、short、int、char、JDK5开始支持枚举、JDK7开始支持字符串string
    //     不支持float、double -------- Java中小数是不精确的
    //     不支持boolean      --------  因为boolean类型只有true和false两个值，没有case值
    //     不支持long         --------  因为long类型是64位，而case只能是32位
    // 2.case给出的值不允许重复，且只能是字面量，不能是变量
    // 3.正常使用Switch的时候，不要忘记写break，否则会出现穿透现象
    public static void test1() {
        System.out.println(0.1+0.2);   // 小数是不精确的！！！

        int a = 10;
        switch (a) {
            case 10:
                System.out.println("10");
                break;
            case 20:
                System.out.println("20");
                break;
            default:
                System.out.println("error");
        }
    }
    // 穿透现象
    // 周一：埋头苦干，解决bug    周二：请求大牛程序员帮忙
    // 周三：请求大牛程序员帮忙    周四：请求大牛程序员帮忙
    // 周五：自己整理代码         周六：打游戏
    // 周日：打游戏
    public static void test2() {
        String week = "周三";
        switch (week) {
            case "周一":
                System.out.println("埋头苦干，解决bug");
                break;
            case "周二":
                System.out.println("请求大牛程序员帮忙");
//                break;
            case "周三":
                System.out.println("请求大牛程序员帮忙");
//                break;
            case "周四":
                System.out.println("请求大牛程序员帮忙");
//                break;
            case "周五":
                System.out.println("自己整理代码");
//                break;
            case "周六":
                System.out.println("打游戏");
                break;
            case "周日":
                System.out.println("打游戏");
                break;
            default:
                System.out.println("星期信息有误");
        }

    }

    // 利用穿透性，简化代码
    // 相同程序的case块，可以通过穿透性进行合并，从而减少重复代码的写法
    public static void test3() {
        String week = "周三";
        switch (week) {
            case "周一":
                System.out.println("埋头苦干，解决bug");
                break;
            case "周二":
            case "周三":
            case "周四":
                System.out.println("请求大牛程序员帮忙");
                break;
            case "周五":
                System.out.println("自己整理代码");
                break;
            case "周六":
            case "周日":
                System.out.println("打游戏");
                break;
            default:
                System.out.println("星期信息有误");
        }

    }
}
